# -*- coding: utf-8 -*-
import threading
import time
import serial

#数据收发使用的端口
ser=0;
insertToWindow=0;
#记录是否有数据返回，用来实现同步串口通信
isReturnData=False;

def open_port(port):
    global ser
    serialPort=port
    insertToWindow("开始监听串口,port="+port+"\n");
    try:
        #打开串口
        ser=serial.Serial(serialPort, 115200,timeout=0.5);
        #开启一个线程监听发送的数据
        t1 = threading.Thread(target=monitorData);
        t1.start();
    except BaseException as err:
        insertToWindow("打开串口失败\n");
        return;

def register(insert):
    global insertToWindow
    insertToWindow=insert

#关闭串口监听
def closeSerial():
    global ser
    ser.close();
    
#发送数据
def sendData(data):
    try:
        global ser
        global isReturnData
        isReturnData=False;
        insertToWindow("==> "+data+"\n");
        ser.write((data +'\n').encode());    #发送
        #等待返回数据
        while isReturnData==False:
            pass
    except BaseException as err:
        insertToWindow("发送命令失败\n");
        return;

#监听收到的数据
def monitorData():
    global ser
    global insertToWindow
    global isReturnData
    while 1:
        rec_data=ser.readline();   #只接受一个字符数据
        result=rec_data.decode('utf-8');   #转化数据格式
        if(len(result))> 0:
            #调用函数
            insertToWindow("<== "+result);
            #已经返回数据
            isReturnData=True;
        
    
     

